//package com.itheima.reggie.common;
//
//import com.itheima.reggie.config.BaseContext;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//import java.time.LocalDateTime;
//
//@Slf4j
//@Aspect
//@Component
//public class MetaAdvice {
//
//    @Pointcut("execution(* com.itheima.reggie.controller.*Controller.save*(..))" +
//            "||" +
//            "execution(* com.itheima.reggie.controller.*Controller.update*(..))")
//    public void pt() {
//    }
//
//    @Around("pt()")
//    public Object metaHandler(ProceedingJoinPoint pjp) {
//
//        Object proceed = null;
//        try {
//            log.info("AOP开始处理..");
//            //获取字节码对象
//            Object[] args = pjp.getArgs();
//            Class<?> aClass = args[0].getClass();
//            //获取执行的方法名
//            String methodName = pjp.getSignature().getName();
//
//            //利用threadlocal获取userId
//            Long currentId = BaseContext.getCurrentId();
//
//            if (methodName.startsWith("save")) { //新增
//
//                Method setCreateTime = aClass.getMethod("setCreateTime", LocalDateTime.class);
//                setCreateTime.invoke(args[0], LocalDateTime.now());
//
//                Method setCreateUser = aClass.getMethod("setCreateUser", Long.class);
//                setCreateUser.invoke(args[0],currentId);
//
//            }
//            Method setUpdateTime = aClass.getMethod("setUpdateTime", LocalDateTime.class);
//            setUpdateTime.invoke(args[0], LocalDateTime.now());
//
//            Method setUpdateUser = aClass.getMethod("setUpdateUser", Long.class);
//            setUpdateUser.invoke(args[0],currentId);
//
//            proceed = pjp.proceed(args);
//        } catch (Throwable throwable) {
//            throwable.printStackTrace();
//        }
//        return proceed;
//    }
//}
